package com.dunke.core.dao;

import com.dunke.core.data.PageData;
import com.dunke.core.data.staff.StaffInfo;
import com.dunke.core.data.staff.StaffLog;
import com.dunke.core.dto.StaffDataDto;

import java.util.List;

/**
 * (DbStaff)表数据库访问层
 *
 * @author makejava
 * @since 2021-06-23 18:34:56
 */
public interface StaffDao {

    /**
     * 新增数据(基本数据)
     * @param info 实例对象
     * @return 新增数据的Id
     */
    Integer insert(StaffInfo info);

    /**
     * 入职数据(时间、类型)
     * @param log 实例对象
     * @return 影响行数
     */
    int entry(StaffLog log);

    /**
     * 修改数据(基本数据)
     * @param staffDto 实例对象
     * @return 影响行数
     */
    int update(StaffInfo staffDto);

    /**
     * 修改数据(在/离职)
     * @param log 实例对象
     * @return 影响行数
     */
    int updateLog(StaffLog log);

    /**
     * 通过员工身份证查询单条数据
     *
     * @param idnumber 用户身份证
     * @return 实例对象
     */
    StaffDataDto queryByIdNumber(String idnumber);

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    StaffDataDto queryById(Integer id);

    /**
     * 查询指定行数据
     * @param page  分页参数
     * @return 对象列表
     */
    List<StaffDataDto> queryAllByLimit(PageData page);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param staffDto 实例对象
     * @return 对象列表
     */
    List<StaffDataDto> queryAll(StaffInfo staffDto);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int delById(Integer id);

    /**
     * 通过主键删除数据
     * @param sid 主键
     * @return 影响行数
     */
    int delLogById(Integer sid);

}

